#include <iostream>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>
using namespace std;
/*
  信号信号可以完成多个进程间通知作用，但是，不能进行数据传输功能

  #include <signal.h>

  int kill(pid_t pid, int sig);
       功能：向指定进程或进程组发送信号
       参数1：进程号或进程组号
            >0:表示向执行进程发送信号
            =0：向当前进程所在的进程组中的所有进程发送信号
            =-1：向所有进程发送信号
            <-1:向指定进程组发送信号，进程组的ID号为给定pid的绝对值
        参数2：要发送的信号
        返回值：成功返回0，失败返回-1并置位错误码


  #include <signal.h>

  int raise(int sig);
     功能：向自己发送信号    等价于：kill(getpid(), sig);
     参数：要发送的信号
    返回值：成功返回0，失败返回非0数组

*/
void handler(int signal)
{
  if (signal == SIGUSR1)
  {
    cout << "逆子！！！" << endl;
    raise(SIGKILL); // 等价 kill(getpid(),SIGKILL);
  }
}

int main(int argc, const char *argv[])
{

  if (signal(SIGUSR1, handler) == SIG_ERR)
  {
    perror("signal error");
    return -1;
  }

  int pid = fork();
  if (pid > 0)
  {
    // 父进程
    while (true)
    {
      cout << "我还想活着" << endl;
      sleep(1);
    }
  }
  else if (pid == 0)
  {
    // 子进程
    sleep(5);
    cout << "这世界无所谓了，拉着老爸一起死" << endl;
    kill(getppid(), SIGUSR1); // SIGUSR1 用户自定义信号，用户自定义处理
    exit(0);
  }
  else
  {
    cout << "fork error" << endl;
  }

  return 0;
}